// ==UserScript== // @name [Demo]彩云 // @name:en [Demo]caiyunFakeupload // @name:zh [Demo]彩云飞 // @namespace npm/vite-plugin-monkey[Demo]refactorcaiyun@bbs.tampermonkey.net.cn // @version 003.2022.1028.1 // @author ae86_qiu // @description A useless Demo for study purposes, simple and stupid. // @icon https://www.google.com/s2/favicons?sz=64&domain=yun.139.com // @match https://yun.139.com/w/#/index // @match https://yun.139.com/w//index // @match https://yun.139.com/w/#/main?t=* // @require https://z.chaoxing.com/js/jquery-3.5.0.min.js // @require https://cdn.staticfile.org/blueimp-md5/2.19.0/js/md5.min.js // @connect yun.139.com // ==/UserScript== (function() { "use strict"; function createFileFromLine(line) { let numbersignCount = line.replace(/[^#]/g, "").length; if (numbersignCount == 3) { let arr = line.split("#"); let digest = arr[0]; let size = arr[2]; let name = arr[3]; return { name, size, digest }; } return null; } function getNewSign(e, t, a, n) { var i = ""; if (t) { var s = Object.assign({}, t); i = JSON.stringify(s), i = i.replace(/\s*/g, ""), i = encodeURIComponent(i); var c = i.split(""), u = c.sort(); i = u.join(""); } var A = md5(btoa(utob(i))); var l = md5(a + ":" + n); return md5(A + l).toUpperCase(); } function utob(str) { const u = String.fromCharCode; return str.replace(/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g, (t) => { if (t.length < 2) { var e = t.charCodeAt(0); return e < 128 ? t : e < 2048 ? u(192 | e >>> 6) + u(128 | 63 & e) : u(224 | e >>> 12 & 15) + u(128 | e >>> 6 & 63) + u(128 | 63 & e); } e = 65536 + 1024 * (t.charCodeAt(0) - 55296) + (t.charCodeAt(1) - 56320); return u(240 | e >>> 18 & 7) + u(128 | e >>> 12 & 63) + u(128 | e >>> 6 & 63) + u(128 | 63 & e); }); } function getRandomSring(t) { for (var e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", a = "", n = 0; n < t; n++) { var o = Math.floor(Math.random() * e.length); a += e.substring(o, o + 1); } return a; } function getRandomString16() { return getRandomSring(16); } function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(";"); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == " ") c = c.substring(1, c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); } return null; } function formatDate(date) { let padTo2Digits = (num) => num.toString().padStart(2, "0"); return [ date.getFullYear(), padTo2Digits(date.getMonth() + 1), padTo2Digits(date.getDate()) ].join("-") + " " + [ padTo2Digits(date.getHours()), padTo2Digits(date.getMinutes()), padTo2Digits(date.getSeconds()) ].join(":"); } function createHeaders(body) { timestamp = formatDate(new Date()); let key = getRandomString16(); let sign = getNewSign(void 0, body, timestamp, key); let headers = { "x-huawei-channelSrc": "10000034", "x-inner-ntwk": "2", "mcloud-channel": "1000101", "mcloud-client": "10701", "mcloud-sign": timestamp + "," + key + "," + sign, "content-type": "application/json;charset=UTF-8", "caller": "web", "CMS-DEVICE": "default", "x-DeviceInfo": "||9|85.0.4183.83|chrome|85.0.4183.83|||windows 10||zh-CN|||", "x-SvcType": "1" }; return headers; } const DEFAULT_ROOT_ID = "00019700101000000001"; class CaiyunConfig { constructor() { let phoneNumber = getPhoneNumber(); let userId = getUserId(); this.account = phoneNumber; this.phoneNumber = phoneNumber; this.myCollectionParentCatalogID = userId + DEFAULT_ROOT_ID; this.RootparentCatalogID = DEFAULT_ROOT_ID; } static getInstance() { if (!CaiyunConfig.instance) { CaiyunConfig.instance = new CaiyunConfig(); } return CaiyunConfig.instance; } } function getPhoneNumber() { return atob(localStorage.getItem("encryptAccount")); } function getUserId() { return JSON.parse(readCookie("userInfo"))["userId"]; } let caiyun = new CaiyunConfig(); var $ = $ || window.$; async function fakeUpload(fileinfoDict) { let params = fakeFilePayload(fileinfoDict); const r = await $.ajax({ method: "POST", url: "https://yun.139.com/orchestration/personalCloud/uploadAndDownload/v1.0/pcUploadFileRequest", headers: createHeaders(params), xhrFields: { withCredentials: true }, data: JSON.stringify(params), dataType: "json", success: function(response) { if (response.status === 200) { console.log( "caiyun FakeUpload:" + JSON.stringify( response.response.data.uploadResult.newContentIDList[0].contentName ) + "\n" + JSON.stringify(response.response) ); } } }); return r; } function fakeFilePayload(config) { console.log(config); let config_uploadContent = { contentName: config.name, contentSize: parseInt(config.size), digest: config.digest }; let otherPayload = { parentCatalogID: config.parentCatalogID || caiyun.RootparentCatalogID }; let payload = { manualRename: 2, operation: 0, fileCount: 1, totalSize: parseInt(config.size), uploadContentList: [config_uploadContent], newCatalogName: "", commonAccountInfo: { account: caiyun.phoneNumber, accountType: 1 } }; return { ...payload, ...otherPayload }; } function shitcode_EasterEgg() { let sing = "OTc1Y2FlZTRkNmRiZjQ5NTM0MTNmNmIyNjJjYzJjNWIjNDFlN2Q1YjFjOTE1ZmRhYzM1NzE3ODRjNjJhNjNiNmMjMzU0ODQwNDcjQWxsIFRoZSBXYXkgTm9ydGggW0luaXRpYWwgUV0ubXAz"; let jump = "NjQwNWZjMzQyOWM0ZjgwNmI4NGJkMGIyZDM0ZmFiZmEjNWM4YzIzZjllYmUyYjFkNjc4MGMzZmI5OWM4Y2UxNTMjNTcwOTU4I2xlbmEuanBn"; let rape = "ZTRmNThhODA1YTZlMWZkMGY2YmVmNThjODZmOWNlYjMjZTRmNThhODA1YTZlMWZkMGY2YmVmNThjODZmOWNlYjMjMTAjbHV2IGxldHRlci50eHQ="; let cxk = { egg1: sing, egg2: jump, egg3: rape }; return cxk; } async function execMainTask() { fakeUpload(createFileFromLine(atob(shitcode_EasterEgg().egg1))); fakeUpload(createFileFromLine(atob(shitcode_EasterEgg().egg2))); fakeUpload(createFileFromLine(atob(shitcode_EasterEgg().egg3))); } execMainTask(); })(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmYWN0b3ItY2FpeXVuLnVzZXIuanMiLCJzb3VyY2VzIjpbInNyYy9lbmNyeXB0LmpzIiwic3JjL3V0aWwuanMiLCJzcmMvaGVhZGVyLmpzIiwic3JjL2NhaXl1bi5qcyIsInNyYy9hcGkuanMiLCJzcmMvZGVtby5qcyIsInNyYy9tYWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7Y3JlYXRlRmlsZUZyb21MaW5lLGdldE5ld1NpZ259XG5cbi8vIGxldCBwYXJhbXMgPSBmYWtlRmlsZVBheWxvYWQoe25hbWU6J2EudHh0JyxzaXplOjEwLGRpZ2VzdDonZTRmNThhODA1YTZlMWZkMGY2YmVmNThjODZmOWNlYjMnfSlcbmZ1bmN0aW9uIGNyZWF0ZUZpbGVGcm9tTGluZShsaW5lKSB7XG4gIGxldCBudW1iZXJzaWduQ291bnQgPSBsaW5lLnJlcGxhY2UoL1teI10vZywgXCJcIikubGVuZ3RoO1xuICBpZiAobnVtYmVyc2lnbkNvdW50ID09IDMpIHtcbiAgICBsZXQgYXJyID0gbGluZS5zcGxpdChcIiNcIik7XG4gICAgbGV0IGRpZ2VzdCA9IGFyclswXTtcbiAgICBsZXQgc2l6ZSA9IGFyclsyXTtcbiAgICBsZXQgbmFtZSA9IGFyclszXTtcbiAgICAvLyBwYXJhbXMgPSBmYWtlRmlsZVBheWxvYWQoY3JlYXRlRmlsZUZyb21MaW5lKGxpbmUpKVxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIGRpZ2VzdDogZGlnZXN0LFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogdGhpcyBvYmZ1c2NhdGVkIGdldE5ld1NpZ24gZnVuY3Rpb24gY29tZXMgZnJvbSB0aGUgb2ZmaWNpYWwgYXBwLjlkZDc1MjgzLmpzXG4gKiBAcGFyYW0ge3VuZGVmaW5lZH0gZVxuICogQHBhcmFtIHtib2R5fSB0XG4gKiBAcGFyYW0ge3RpbWVzdGFtcH0gYVxuICogQHBhcmFtIHtyYW5kU3RyMTZ9IG5cbiAqIG1kNTogaHR0cHM6Ly9jZG4uc3RhdGljZmlsZS5vcmcvYmx1ZWltcC1tZDUvMi4xOS4wL2pzL21kNS5taW4uanNcbiAqIHV0aWxzLkdldE1ENUVuY29kZSh0cytcIjpcIityYW5kU3RyKVxuICogaHR0cHM6Ly95dW4uMTM5LmNvbS93L3N0YXRpYy9qcy9hcHAuOWRkNzUyODMuanNcbiAqL1xuZnVuY3Rpb24gZ2V0TmV3U2lnbihlLCB0LCBhLCBuKSB7XG4gIHZhciByID0gXCJcIixcbiAgICAgIGkgPSBcIlwiO1xuICBpZiAodCkge1xuICAgIHZhciBzID0gT2JqZWN0LmFzc2lnbih7fSwgdCk7XG4gICAgaSA9IEpTT04uc3RyaW5naWZ5KHMpLFxuICAgIGkgPSBpLnJlcGxhY2UoL1xccyovZywgXCJcIiksXG4gICAgaSA9IGVuY29kZVVSSUNvbXBvbmVudChpKTtcbiAgICB2YXIgYyA9IGkuc3BsaXQoXCJcIiksXG4gICAgdSA9IGMuc29ydCgpO1xuICAgIGkgPSB1LmpvaW4oXCJcIilcbiAgfVxuICB2YXIgQSA9IG1kNShidG9hKHV0b2IoaSkpKTsgXG4gIHZhciBsID0gbWQ1KGEgKyBcIjpcIiArIG4pO1xuICByZXR1cm4gbWQ1KEEgKyBsKS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiB1dG9iKHN0cikge1xuICBjb25zdCB1ID0gU3RyaW5nLmZyb21DaGFyQ29kZVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRkZdfFteXFx4MDAtXFx4N0ZdL2csICh0KSA9PiB7XG4gICAgaWYgKHQubGVuZ3RoIDwgMikge1xuICAgIHZhciBlID0gdC5jaGFyQ29kZUF0KDApO1xuICAgIHJldHVybiBlIDwgMTI4ID8gdCA6IGUgPCAyMDQ4ID8gdSgxOTIgfCBlID4+PiA2KSArIHUoMTI4IHwgNjMgJiBlKSA6IHUoMjI0IHwgZSA+Pj4gMTIgJiAxNSkgKyB1KDEyOCB8IGUgPj4+IDYgJiA2MykgKyB1KDEyOCB8IDYzICYgZSlcbiAgICB9XG4gICAgZSA9IDY1NTM2ICsgMTAyNCAqICh0LmNoYXJDb2RlQXQoMCkgLSA1NTI5NikgKyAodC5jaGFyQ29kZUF0KDEpIC0gNTYzMjApO1xuICAgIHJldHVybiB1KDI0MCB8IGUgPj4+IDE4ICYgNykgKyB1KDEyOCB8IGUgPj4+IDEyICYgNjMpICsgdSgxMjggfCBlID4+PiA2ICYgNjMpICsgdSgxMjggfCA2MyAmIGUpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIF9idG9hKHYpeyAvLyBiYXNlNjQgZW5jb2RlXG4gIHJldHVybiBidG9hKHYpIC8vIHJldHVybiBCdWZmZXIuZnJvbSh2KS50b1N0cmluZygnYmFzZTY0Jylcbn0iLCJleHBvcnQgeyBmb3JtYXREYXRlLCByZWFkQ29va2llLCBieXRlU2l6ZSwgUG9zdERhdGEsIGdldFJhbmRvbVN0cmluZzE2IH07XG5cbmZ1bmN0aW9uIGdldFJhbmRvbVNyaW5nKHQpIHtcbiAgLy8gdGhlIGVtcGxveWVlcyBvZiBDaGluYSBNb2JpbGUgbWlzc3BlbGxlZCB0aGUgd29yZCAnc3RyaW5nJ1xuICBmb3IgKFxuICAgIHZhciBlID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OVwiLFxuICAgICAgYSA9IFwiXCIsXG4gICAgICBuID0gMDtcbiAgICBuIDwgdDtcbiAgICBuKytcbiAgKSB7XG4gICAgdmFyIG8gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBlLmxlbmd0aCk7XG4gICAgYSArPSBlLnN1YnN0cmluZyhvLCBvICsgMSk7XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbmZ1bmN0aW9uIGdldFJhbmRvbVN0cmluZzE2KCkge1xuICAvKiBsZW5ndGggPSAxNiwgcmFuZG9tIHN0cmluZyAqL1xuICByZXR1cm4gZ2V0UmFuZG9tU3JpbmcoMTYpO1xufVxuXG5jb25zdCBieXRlU2l6ZSA9IChzdHIpID0+XG4gIG5ldyBCbG9iKFtzdHJdKVxuICAgIC5zaXplOyAvKiBodHRwczovL2Rldi50by9yYWpuaXNoa2F0aGFyb3RpeWEvZ2V0LWJ5dGUtc2l6ZS1vZi10aGUtc3RyaW5nLWluLWphdmFzY3JpcHQtMjBqbSAqL1xuXG5mdW5jdGlvbiBQb3N0RGF0YShkaWN0KSB7XG4gIHZhciBrLCB0bXAsIHY7XG4gIHRtcCA9IFtdO1xuICBmb3IgKGsgaW4gZGljdCkge1xuICAgIHYgPSBkaWN0W2tdO1xuICAgIHRtcC5wdXNoKGsgKyBcIj1cIiArIHYpO1xuICB9XG4gIHJldHVybiB0bXAuam9pbihcIiZcIik7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTE0MjMzNy9yZWFkLWEtamF2YXNjcmlwdC1jb29raWUtYnktbmFtZVxuICogaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvY29va2llcy5odG1sXG4gKiB2YXIgdXNlcklkID0gSlNPTi5wYXJzZShyZWFkQ29va2llKFwidXNlckluZm9cIikpW1widXNlcklkXCJdO1xuICovXG5mdW5jdGlvbiByZWFkQ29va2llKG5hbWUpIHtcbiAgdmFyIG5hbWVFUSA9IG5hbWUgKyBcIj1cIjtcbiAgdmFyIGNhID0gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjID0gY2FbaV07XG4gICAgd2hpbGUgKGMuY2hhckF0KDApID09IFwiIFwiKSBjID0gYy5zdWJzdHJpbmcoMSwgYy5sZW5ndGgpO1xuICAgIGlmIChjLmluZGV4T2YobmFtZUVRKSA9PSAwKSByZXR1cm4gYy5zdWJzdHJpbmcobmFtZUVRLmxlbmd0aCwgYy5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIHJldHVybiAneXl5eS1NTS1kZCBoaDptbTpzcycgZm9ybWF0IGRhdGVcbiAqIGUuZzonMjAyMi0wOC0zMSAyMDozMDowMCdcbiAqIGh0dHBzOi8vYm9iYnloYWR6LmNvbS9ibG9nL2phdmFzY3JpcHQtZm9ybWF0LWRhdGUteXl5eS1tbS1kZC1oaC1tbS1zc1xuICovXG5mdW5jdGlvbiBmb3JtYXREYXRlKGRhdGUpIHtcbiAgbGV0IHBhZFRvMkRpZ2l0cyA9IChudW0pID0+IG51bS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKTtcbiAgcmV0dXJuIChcbiAgICBbXG4gICAgICBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICBwYWRUbzJEaWdpdHMoZGF0ZS5nZXRNb250aCgpICsgMSksXG4gICAgICBwYWRUbzJEaWdpdHMoZGF0ZS5nZXREYXRlKCkpLFxuICAgIF0uam9pbihcIi1cIikgK1xuICAgIFwiIFwiICtcbiAgICBbXG4gICAgICBwYWRUbzJEaWdpdHMoZGF0ZS5nZXRIb3VycygpKSxcbiAgICAgIHBhZFRvMkRpZ2l0cyhkYXRlLmdldE1pbnV0ZXMoKSksXG4gICAgICBwYWRUbzJEaWdpdHMoZGF0ZS5nZXRTZWNvbmRzKCkpLFxuICAgIF0uam9pbihcIjpcIilcbiAgKTsgLy8gJzIwMjItMDgtMzEgMjA6MzA6MDAnXG59XG5cbmZ1bmN0aW9uIEx0KCkge1xuICAvKiAyMDIyMDgzMDEyMjgxNSBodHRwczovL3l1bi4xMzkuY29tL3cvc3RhdGljL2pzL2FwcC45ZGQ3NTI4My5qcyAjTDEwNzY5ICovXG4gIHZhciB0ID0gbmV3IERhdGUoKSxcbiAgICBlID0gdC5nZXRGdWxsWWVhcigpLFxuICAgIGEgPSB0LmdldE1vbnRoKCkgKyAxIDwgMTAgPyBcIjBcIi5jb25jYXQodC5nZXRNb250aCgpICsgMSkgOiB0LmdldE1vbnRoKCkgKyAxLFxuICAgIG4gPSB0LmdldERhdGUoKSA8IDEwID8gXCIwXCIuY29uY2F0KHQuZ2V0RGF0ZSgpKSA6IHQuZ2V0RGF0ZSgpLFxuICAgIG8gPSB0LmdldEhvdXJzKCkgPCAxMCA/IFwiMFwiLmNvbmNhdCh0LmdldEhvdXJzKCkpIDogdC5nZXRIb3VycygpLFxuICAgIGkgPSB0LmdldE1pbnV0ZXMoKSA8IDEwID8gXCIwXCIuY29uY2F0KHQuZ2V0TWludXRlcygpKSA6IHQuZ2V0TWludXRlcygpLFxuICAgIHMgPSB0LmdldFNlY29uZHMoKSA8IDEwID8gXCIwXCIuY29uY2F0KHQuZ2V0U2Vjb25kcygpKSA6IHQuZ2V0U2Vjb25kcygpO1xuICByZXR1cm4gXCJcIi5jb25jYXQoZSkuY29uY2F0KGEpLmNvbmNhdChuKS5jb25jYXQobykuY29uY2F0KGkpLmNvbmNhdChzKTtcbn1cbiIsImltcG9ydCB7Z2V0TmV3U2lnbn0gZnJvbSAnLi9lbmNyeXB0JztcbmltcG9ydCB7Zm9ybWF0RGF0ZSwgZ2V0UmFuZG9tU3RyaW5nMTZ9IGZyb20gJy4vdXRpbCc7XG5leHBvcnQge2NyZWF0ZUhlYWRlcnN9XG5mdW5jdGlvbiBjcmVhdGVIZWFkZXJzKGJvZHkpIHtcbiAgICB0aW1lc3RhbXAgPSBmb3JtYXREYXRlKG5ldyBEYXRlKCkpIC8qIGUuZzogJzIwMjItMDgtMzEgMjA6MzA6MDAnICovXG4gICAgbGV0IGtleSA9IGdldFJhbmRvbVN0cmluZzE2KCkgXG4gICAgbGV0IHNpZ24gPSBnZXROZXdTaWduKHVuZGVmaW5lZCwgYm9keSwgdGltZXN0YW1wLCBrZXkpXG4gICAgbGV0IGhlYWRlcnMgPSB7XG4gICAgICAgICd4LWh1YXdlaS1jaGFubmVsU3JjJzogJzEwMDAwMDM0JyxcbiAgICAgICAgJ3gtaW5uZXItbnR3ayc6ICcyJyxcbiAgICAgICAgJ21jbG91ZC1jaGFubmVsJzogJzEwMDAxMDEnLFxuICAgICAgICAnbWNsb3VkLWNsaWVudCc6ICcxMDcwMScsXG4gICAgICAgICdtY2xvdWQtc2lnbic6IHRpbWVzdGFtcCArIFwiLFwiICsga2V5ICsgXCIsXCIgKyBzaWduLFxuICAgICAgICAvLyAnbWNsb3VkLXNrZXknOiBudWxsLFxuICAgICAgICAnY29udGVudC10eXBlJzogXCJhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9VVRGLThcIixcbiAgICAgICAgJ2NhbGxlcic6ICd3ZWInLFxuICAgICAgICAnQ01TLURFVklDRSc6ICdkZWZhdWx0JyxcbiAgICAgICAgJ3gtRGV2aWNlSW5mbyc6ICd8fDl8ODUuMC40MTgzLjgzfGNocm9tZXw4NS4wLjQxODMuODN8fHx3aW5kb3dzIDEwfHx6aC1DTnx8fCcsXG4gICAgICAgICd4LVN2Y1R5cGUnOiAnMScsXG4gICAgICAgIC8vICdyZWZlcmVyJzogJ2h0dHBzOi8veXVuLjEzOS5jb20vdy8nLFxuICAgIH1cbiAgICByZXR1cm4gaGVhZGVyc1xufSIsImltcG9ydCB7IHJlYWRDb29raWUgfSBmcm9tIFwiLi91dGlsXCI7XG5jb25zdCBERUZBVUxUX1JPT1RfSUQgPSBcIjAwMDE5NzAwMTAxMDAwMDAwMDAxXCI7XG4vKipcbiAqIFNpbmdsZXRvblxuICogbGV0IGNhaXl1biA9IG5ldyBDYWl5dW5Db25maWcoKTtcbiAqL1xuZXhwb3J0IGNsYXNzIENhaXl1bkNvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGxldCBwaG9uZU51bWJlciA9IGdldFBob25lTnVtYmVyKCk7XG4gICAgbGV0IHVzZXJJZCA9IGdldFVzZXJJZCgpO1xuICAgIHRoaXMuYWNjb3VudCA9IHBob25lTnVtYmVyO1xuICAgIHRoaXMucGhvbmVOdW1iZXIgPSBwaG9uZU51bWJlcjtcbiAgICB0aGlzLm15Q29sbGVjdGlvblBhcmVudENhdGFsb2dJRCA9IHVzZXJJZCArIERFRkFVTFRfUk9PVF9JRDsgLy8gJ015QXBwQ29sbGVjdGlvbicgMTAxMVpUbHYzMVFoMDAwMTk3MDAxMDEwMDAwMDAwNzEgIHVzZXJJZCArIERFRkFVTFRfUk9PVF9JRFxuICAgIHRoaXMuUm9vdHBhcmVudENhdGFsb2dJRCA9IERFRkFVTFRfUk9PVF9JRDsgLy8gcm9vdCBGb2xkZXJcbiAgfVxuICBzdGF0aWMgZ2V0SW5zdGFuY2UoKSB7XG4gICAgaWYgKCFDYWl5dW5Db25maWcuaW5zdGFuY2UpIHtcbiAgICAgICAgQ2FpeXVuQ29uZmlnLmluc3RhbmNlID0gbmV3IENhaXl1bkNvbmZpZygpO1xuICAgIH1cbiAgICByZXR1cm4gQ2FpeXVuQ29uZmlnLmluc3RhbmNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBob25lTnVtYmVyKCkge1xuICByZXR1cm4gYXRvYihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImVuY3J5cHRBY2NvdW50XCIpKTtcbn1cblxuZnVuY3Rpb24gZ2V0VXNlcklkKCkge1xuICByZXR1cm4gSlNPTi5wYXJzZShyZWFkQ29va2llKFwidXNlckluZm9cIikpW1widXNlcklkXCJdO1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlSGVhZGVycyB9IGZyb20gJy4vaGVhZGVyJztcbmltcG9ydCB7IENhaXl1bkNvbmZpZyB9IGZyb20gJy4vY2FpeXVuJztcbmV4cG9ydCB7IGZha2VVcGxvYWQgfTtcblxubGV0IGNhaXl1biA9IG5ldyBDYWl5dW5Db25maWcoKSAvLyBzaW5nbGV0b25cbnZhciAkID0gJCB8fCB3aW5kb3cuJDtcbnZhciBEZWJ1Z01PREUgPSBmYWxzZTtcblxuYXN5bmMgZnVuY3Rpb24gZmFrZVVwbG9hZChmaWxlaW5mb0RpY3QpIHtcbiAgbGV0IHBhcmFtcyA9IGZha2VGaWxlUGF5bG9hZChmaWxlaW5mb0RpY3QpO1xuICBpZiAoRGVidWdNT0RFKSB7XG4gICAgY29uc29sZS5sb2coXCJQT1NUaW5nXCIpO1xuICB9XG4gIGNvbnN0IHIgPSBhd2FpdCAkLmFqYXgoe1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgdXJsOiBcImh0dHBzOi8veXVuLjEzOS5jb20vb3JjaGVzdHJhdGlvbi9wZXJzb25hbENsb3VkL3VwbG9hZEFuZERvd25sb2FkL3YxLjAvcGNVcGxvYWRGaWxlUmVxdWVzdFwiLFxuICAgIGhlYWRlcnM6IGNyZWF0ZUhlYWRlcnMocGFyYW1zKSxcbiAgICB4aHJGaWVsZHM6IHtcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSwgLy8gJ0Nvb2tpZSc6Y2FpeXVuLmNvb2tpZVxuICAgIH0sXG4gICAgZGF0YTogSlNPTi5zdHJpbmdpZnkocGFyYW1zKSxcbiAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgXCJjYWl5dW4gRmFrZVVwbG9hZDpcIiArXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgcmVzcG9uc2UucmVzcG9uc2UuZGF0YS51cGxvYWRSZXN1bHQubmV3Q29udGVudElETGlzdFswXVxuICAgICAgICAgICAgICAgIC5jb250ZW50TmFtZVxuICAgICAgICAgICAgKSArXG4gICAgICAgICAgICBcIlxcblwiICtcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLnJlc3BvbnNlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gZmFrZUZpbGVQYXlsb2FkKGNvbmZpZykge1xuICAvLyBmb28gY29uZmlnIHtuYW1lOidhLnR4dCcsc2l6ZToyLGRpZ2VzdDonNjBiNzI1ZjEwYzljODVjNzBkOTc4ODBkZmU4MTkxYjMnLHBhcmVudENhdGFsb2dJRDonJ31cbiAgY29uc29sZS5sb2coY29uZmlnKTtcbiAgbGV0IGNvbmZpZ191cGxvYWRDb250ZW50ID0ge1xuICAgIGNvbnRlbnROYW1lOiBjb25maWcubmFtZSxcbiAgICBjb250ZW50U2l6ZTogcGFyc2VJbnQoY29uZmlnLnNpemUpLCAvLyBbTXVzdCBiZSBhIE51bWJlcl1cbiAgICBkaWdlc3Q6IGNvbmZpZy5kaWdlc3QsXG4gIH07XG4gIGxldCBvdGhlclBheWxvYWQgPSB7XG4gICAgcGFyZW50Q2F0YWxvZ0lEOiBjb25maWcucGFyZW50Q2F0YWxvZ0lEIHx8IGNhaXl1bi5Sb290cGFyZW50Q2F0YWxvZ0lEIC8vIGRlZmF1bHQgcGFyZW50OnJvb3QgZm9sZGVyXG4gIH07XG4gIGxldCBwYXlsb2FkID0ge1xuICAgIG1hbnVhbFJlbmFtZTogMiwgLy8gW011c3QgYmUgYSBOdW1iZXJdXG4gICAgb3BlcmF0aW9uOiAwLCAvLyB1cGxvYWQgW011c3QgYmUgYSBOdW1iZXJdXG4gICAgZmlsZUNvdW50OiAxLCAvLyBvbmx5IHN1cHBvcnQgb25lIGZpbGUgW011c3QgYmUgYSBOdW1iZXJdXG4gICAgdG90YWxTaXplOiBwYXJzZUludChjb25maWcuc2l6ZSksIC8vIFtNdXN0IGJlIGEgTnVtYmVyXVxuICAgIC8vICd1cGxvYWRDb250ZW50TGlzdCc6W2NvbmZpZ191cGxvYWRDb250ZW50XSwgdHlwZSBVcGxvYWRDb250ZW50SW5mb1tdXG4gICAgdXBsb2FkQ29udGVudExpc3Q6IFtjb25maWdfdXBsb2FkQ29udGVudF0sXG4gICAgLy8gJ3BhcmVudENhdGFsb2dJRCdcbiAgICBuZXdDYXRhbG9nTmFtZTogXCJcIixcbiAgICBjb21tb25BY2NvdW50SW5mbzoge1xuICAgICAgYWNjb3VudDogY2FpeXVuLnBob25lTnVtYmVyLFxuICAgICAgYWNjb3VudFR5cGU6IDEsXG4gICAgfSxcbiAgfTtcbiAgcmV0dXJuIHsgLi4ucGF5bG9hZCwgLi4ub3RoZXJQYXlsb2FkIH07XG59XG4iLCJleHBvcnQge3NoaXRjb2RlX0Vhc3RlckVnZ31cbmZ1bmN0aW9uIHNoaXRjb2RlX0Vhc3RlckVnZygpe1xuICAgIGxldCBzaW5nID0gJ09UYzFZMkZsWlRSa05tUmlaalE1TlRNME1UTm1ObUl5TmpKall6SmpOV0lqTkRGbE4yUTFZakZqT1RFMVptUmhZek0xTnpFM09EUmpOakpoTmpOaU5tTWpNelUwT0RRd05EY2pRV3hzSUZSb1pTQlhZWGtnVG05eWRHZ2dXMGx1YVhScFlXd2dVVjB1YlhBeidcbiAgICBsZXQganVtcCA9ICdOalF3Tldaak16UXlPV00wWmpnd05tSTROR0prTUdJeVpETTBabUZpWm1Fak5XTTRZekl6WmpsbFltVXlZakZrTmpjNE1HTXpabUk1T1dNNFkyVXhOVE1qTlRjd09UVTRJMnhsYm1FdWFuQm4nXG4gICAgbGV0IHJhcGUgPSAnWlRSbU5UaGhPREExWVRabE1XWmtNR1kyWW1WbU5UaGpPRFptT1dObFlqTWpaVFJtTlRoaE9EQTFZVFpsTVdaa01HWTJZbVZtTlRoak9EWm1PV05sWWpNak1UQWpiSFYySUd4bGRIUmxjaTUwZUhRPSdcbiAgICBsZXQgY3hrID0ge2VnZzE6IHNpbmcsZWdnMjoganVtcCxlZ2czOiByYXBlfVxuICAgIHJldHVybiBjeGtcbn0iLCJcbmltcG9ydCB7IGZha2VVcGxvYWQgfSBmcm9tIFwiLi9hcGlcIjtcbmltcG9ydCB7IGNyZWF0ZUZpbGVGcm9tTGluZSB9IGZyb20gXCIuL2VuY3J5cHRcIjtcbmltcG9ydCB7IHNoaXRjb2RlX0Vhc3RlckVnZyB9IGZyb20gXCIuL2RlbW9cIjtcblxuYXN5bmMgZnVuY3Rpb24gZXhlY01haW5UYXNrKCkge1xuICBmYWtlVXBsb2FkKGNyZWF0ZUZpbGVGcm9tTGluZShhdG9iKHNoaXRjb2RlX0Vhc3RlckVnZygpLmVnZzEpKSk7XG4gIGZha2VVcGxvYWQoY3JlYXRlRmlsZUZyb21MaW5lKGF0b2Ioc2hpdGNvZGVfRWFzdGVyRWdnKCkuZWdnMikpKTtcbiAgZmFrZVVwbG9hZChjcmVhdGVGaWxlRnJvbUxpbmUoYXRvYihzaGl0Y29kZV9FYXN0ZXJFZ2coKS5lZ2czKSkpO1xufVxuZXhlY01haW5UYXNrKCk7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLFdBQVMsbUJBQW1CLE1BQU07QUFDaEMsUUFBSSxrQkFBa0IsS0FBSyxRQUFRLFNBQVMsRUFBRSxFQUFFO0FBQ2hELFFBQUksbUJBQW1CLEdBQUc7QUFDeEIsVUFBSSxNQUFNLEtBQUssTUFBTSxHQUFHO0FBQ3hCLFVBQUksU0FBUyxJQUFJO0FBQ2pCLFVBQUksT0FBTyxJQUFJO0FBQ2YsVUFBSSxPQUFPLElBQUk7QUFFZixhQUFPO0FBQUEsUUFDTDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDTjtBQUFBLElBQ0c7QUFDRCxXQUFPO0FBQUEsRUFDVDtBQVlBLFdBQVMsV0FBVyxHQUFHLEdBQUcsR0FBRyxHQUFHO0FBQzNCLFFBQ0MsSUFBSTtB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VCxpQkFBaUI7QUFBQSxNQUNsQjtBQUFBLE1BQ0QsTUFBTSxLQUFLLFVBQVUsTUFBTTtBQUFBLE1BQzNCLFVBQVU7QUFBQSxNQUNWLFNBQVMsU0FBVSxVQUFVO0FBQzNCLFlBQUksU0FBUyxXQUFXLEtBQUs7QUFDM0Isa0JBQVE7QUFBQSxZQUNOLHVCQUNFLEtBQUs7QUFBQSxjQUNILFNBQVMsU0FBUyxLQUFLLGFBQWEsaUJBQWlCLEdBQ2xEO0FBQUEsWUFDSixJQUNELE9BQ0EsS0FBSyxVQUFVLFNBQVMsUUFBUTtBQUFBLFVBQzVDO0FBQUEsUUFDTztBQUFBLE1BQ0Y7QUFBQSxJQUNMLENBQUc7QUFDRCxXQUFPO0FBQUEsRUFDVDtBQUVBLFdBQVMsZ0JBQWdCLFFBQVE7QUFFL0IsWUFBUSxJQUFJLE1BQU07QUFDbEIsUUFBSSx1QkFBdUI7QUFBQSxNQUN6QixhQUFhLE9BQU87QUFBQSxNQUNwQixhQUFhLFNBQVMsT0FBTyxJQUFJO0FBQUEsTUFDakMsUUFBUSxPQUFPO0FBQUEsSUFDbkI7QUFDRSxRQUFJLGVBQWU7QUFBQSxNQUNqQixpQkFBaUIsT0FBTyxtQkFBbUIsT0FBTztBQUFBLElBQ3REO0FBQ0UsUUFBSSxVQUFVO0FBQUEsTUFDWixjQUFjO0FBQUEsTUFDZCxXQUFXO0FBQUEsTUFDWCxXQUFXO0FBQUEsTUFDWCxXQUFXLFNBQVMsT0FBTyxJQUFJO0FBQUEsTUFFL0IsbUJBQW1CLENBQUMsb0JBQW9CO0FBQUEsTUFFeEMsZ0JBQWdCO0FBQUEsTUFDaEIsbUJBQW1CO0FBQUEsUUFDakIsU0FBUyxPQUFPO0FBQUEsUUFDaEIsYUFBYTtBQUFBLE1BQ2Q7QUFBQSxJQUNMO0FBQ0UsV0FBTyxFQUFFLEdBQUcsU0FBUyxHQUFHO0VBQzFCO0FDaEVBLFdBQVMscUJBQW9CO0FBQ3pCLFFBQUksT0FBTztBQUNYLFFBQUksT0FBTztBQUNYLFFBQUksT0FBTztBQUNYLFFBQUksTUFBTSxFQUFDLE1BQU0sTUFBSyxNQUFNLE1BQUssTUFBTSxLQUFJO0FBQzNDLFdBQU87QUFBQSxFQUNYO0FDRkEsaUJBQWUsZUFBZTtBQUM1QixlQUFXLG1CQUFtQixLQUFLLG1CQUFrQixFQUFHLElBQUksQ0FBQyxDQUFDO0FBQzlELGVBQVcsbUJBQW1CLEtBQUssbUJBQWtCLEVBQUcsSUFBSSxDQUFDLENBQUM7QUFDOUQsZUFBVyxtQkFBbUIsS0FBSyxtQkFBa0IsRUFBRyxJQUFJLENBQUMsQ0FBQztBQUFBLEVBQ2hFO0FBQ0EsZUFBYzs7Iiwic291cmNlUm9vdCI6Ii9ucG0vdml0ZS1wbHVnaW4tbW9ua2V5W0RlbW9dcmVmYWN0b3JjYWl5dW5AYmJzLnRhbXBlcm1vbmtleS5uZXQuY24vW0RlbW9d5b2p5LqRLyJ9